Retour index

Traduction d'une boucle tantque en assembleur 8051

Retour niveau sup

Le dictionnaire des variables correspondant à l'algorithme est (visualiser l'algorithme):

Nom

Type

Catégorie

Allocation

num

entier.b

variable

R2

denum

entier.b

variable

R1

result

entier.b

variable

R0

denum.result

entier.b

variable

A

var intermédiaire

entier.b

variable

B

 

Le choix de l'allocation est arbitraire. Ce choix est généralement guidé par les contraintes imposées par le cahier des charges. La notation entier.b n'est pas normalisée. Elle est appliquée au choix qui est fait ici d'implanter cet algorithme en assembleur 51. Enfin, le fait qu'en assembleur, il n’est possible que de faire une opération par instruction, il est nécessaire d'ajouter une variable intermédiaire denum.result allouée dans A. L'utilisation de B est imposée par la multiplication en assembleur 51. La traduction de l'algorithme donne :

 

     org 0000h

     ljmp debut

 

     org 0030h

debut:  mov R0,#00h     ; result <- 0

        mov B,R0        ; B <- R0 pour la multiplication

        mov A,R1        ; A <- R1 pour la multiplication

        mul AB          ; A <- demum.reslut

        subb A,R2       ;  test si denum.result - num < 0

 tq:        jnc fintq   ; sortie de la boucle Tant que

            inc R0      ; result <- result + 1

boucle

tant que(condition)

faire

 
            mov B,R0    ; B <- R0 pour la multiplication

            mov A,R1    ; A <- R1 pour la multiplication

            mul AB      ; A <- demum.reslut

            subb A,R2   ;  test si denum.result - num < 0

test

 
            ljmp tq

fintq:  jnz sivrai      ; si denum.result>num alors sivrai

finsi:  mov P0,R0

bou:    ret             ; fin du code

sivrai:     dec R0      ; result <- result - 1

            ljmp finsi  ; aller à finsi

    end

Retour index

Suite